如何在tkinter中显示matplotlib图表 您所在的位置:网站首页 matplotlib canvas 如何在tkinter中显示matplotlib图表

如何在tkinter中显示matplotlib图表

2023-04-24 03:32| 来源: 网络整理| 查看: 265

我看到两个问题

优先:

您创建了4个canvas FigureCanvasTkAgg,并且在每个canvas上使用add_subplot(222)为4个地块(2x2)创建位置,但在每个canvas中只使用一个位置。为此,您只能使用一个画布。

Second:

您需要pack(fill="both", expand=True)来调整绘图大小并使用窗口中的所有空间。

您还可以使用pack(side=tk.RIGHT),它可能会在布局方面造成问题

最小工作代码

import tkinter as tk import pandas as pd import matplotlib.pyplot as plt import matplotlib matplotlib.use("TkAgg") from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg #from matplotlib.figure import Figure df1 = pd.DataFrame({ 'year': [2001, 2002, 2003], 'value': [1, 3, 2], 'personal': [9, 1, 5], }) df2 = pd.DataFrame({ 'year': [2001, 2002, 2003], 'value': [1, 3, 2], 'personal': [9, 1, 5], }) # --- root = tk.Tk() figure = plt.Figure(figsize=(2,2), dpi=100) scatter = FigureCanvasTkAgg(figure, root) scatter.get_tk_widget().pack() #fill='both', expand=True) # --- ax1 = figure.add_subplot(221) ax1.plot(df1['year'], df1['personal'], color='red') ax1.legend(['']) ax1.set_xlabel('valeur de personals') ax1.set_title('ev de personal ') # --- ax2 = figure.add_subplot(222) ax2.plot(df2['year'], df2['value'], color='red') ax2.legend(['']) ax2.set_xlabel('valeur BSA') ax2.set_title('Evolutiion des valeurs BSA depuis 1990 ') # --- ax3 = figure.add_subplot(223) ax3.plot(df1['year'], df1['personal'], color='red') ax3.legend(['']) ax3.set_xlabel('valeur de personals') ax3.set_title('ev de personal ') # --- ax4 = figure.add_subplot(224) ax4.plot(df2['year'], df2['value'], color='red') ax4.legend(['']) ax4.set_xlabel('valeur BSA') ax4.set_title('Evolutiion des valeurs BSA depuis 1990 ') # --- root.mainloop()

结果:

编辑:

对于4个画布也是如此-每个画布只使用add_plot('111')保存一个绘图-但这次我使用grid()而不是pack()来组织它。

它需要columnconfigure,rowconfigure来调整单元格的大小,并使用窗口中的所有空间。和grid( ..., sticky='news')将画布大小调整为单元格的大小。

import tkinter as tk import pandas as pd import matplotlib.pyplot as plt import matplotlib matplotlib.use("TkAgg") from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg #from matplotlib.figure import Figure df1 = pd.DataFrame({ 'year': [2001, 2002, 2003], 'value': [1, 3, 2], 'personal': [9, 1, 5], }) df2 = pd.DataFrame({ 'year': [2001, 2002, 2003], 'value': [1, 3, 2], 'personal': [9, 1, 5], }) # --- root = tk.Tk() # resize grid root.columnconfigure(0, weight=1) root.columnconfigure(1, weight=1) root.rowconfigure(0, weight=1) root.rowconfigure(1, weight=1) # --- figure1 = plt.Figure(figsize=(2,2), dpi=100) scatter1 = FigureCanvasTkAgg(figure1, root) scatter1.get_tk_widget().grid(row=0, column=0, sticky='news') #scatter1.get_tk_widget().pack(fill='both', expand=True) ax1 = figure1.add_subplot(111) ax1.plot(df1['year'], df1['personal'], color='red') ax1.legend(['']) ax1.set_xlabel('valeur de personals') ax1.set_title('ev de personal ') # --- figure2 = plt.Figure(figsize=(2,2), dpi=100) scatter2 = FigureCanvasTkAgg(figure2, root) scatter2.get_tk_widget().grid(row=0, column=1, sticky='news') #scatter2.get_tk_widget().pack(side='right', fill='both', expand=True) ax2 = figure2.add_subplot(111) ax2.plot(df2['year'], df2['value'], color='red') ax2.legend(['']) ax2.set_xlabel('valeur BSA') ax2.set_title('Evolutiion des valeurs BSA depuis 1990 ') # --- figure3 = plt.Figure(figsize=(2,2), dpi=100) scatter3 = FigureCanvasTkAgg(figure3, root) scatter3.get_tk_widget().grid(row=1, column=0, sticky='news') #scatter3.get_tk_widget().pack(fill='both', expand=True) ax3 = figure3.add_subplot(111) ax3.plot(df1['year'], df1['personal'], color='red') ax3.legend(['']) ax3.set_xlabel('valeur de personals') ax3.set_title('ev de personal ') # --- figure4 = plt.Figure(figsize=(2,2), dpi=100) scatter4 = FigureCanvasTkAgg(figure4, root) scatter4.get_tk_widget().grid(row=1, column=1, sticky='news') #scatter4.get_tk_widget().pack(fill='both', expand=True) ax4 = figure4.add_subplot(111) ax4.plot(df2['year'], df2['value'], color='red') ax4.legend(['']) ax4.set_xlabel('valeur BSA') ax4.set_title('Evolutiion des valeurs BSA depuis 1990 ') # --- root.mainloop()

结果:

现在plots的边距变小了。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有